草庐IT

C++ 匿名变量

全部标签

Ruby 在 while 循环中忘记了局部变量?

我正在处理一个基于记录的文本文件:所以我正在寻找一个构成记录开始的起始字符串:没有记录结束标记,所以我使用下一条记录的开始分隔最后一条记录。所以我构建了一个简单的程序来执行此操作,但我看到了一些让我吃惊的东西:看起来Ruby忘记了局部变量的存在——或者我发现了一个编程错误?[虽然我认为我没有:如果我在循环之前定义变量“消息”,我看不到错误]。这是一个简化的示例,其中包含示例输入数据和注释中的错误消息:flag=false#message=nil#thisiswillpreventtheissue.whileline=getsdoifline=~/hello/thenifflag==tr

ruby - `class_eval` 字符串中的变量范围是什么?

我正在使用class_eval编写要在当前类的上下文中执行的代码。在下面的代码中,我想为属性值的变化添加一个计数器。classClassdefattr_count(attr_name)attr_name=attr_name.to_sattr_readerattr_name#createtheattribute'sgetterclass_eval%Q{@count=0def#{attr_name}=(attr_name)@attr_name=attr_name@count+=1enddef#{attr_name}@attr_nameend}endendclassFooattr_count

ruby - 如何访问 IRB 所需的 Ruby 文件中定义的变量?

文件welcome.rb包含:welcome_message="hithere"但是在IRB中,我无法访问我刚刚创建的变量:require'./welcome.rb'putswelcome_message#=>undefinedlocalvariableormethod`welcome_message'formain:Object当您在IRBsession中require某些内容时,引入预定义变量并完成初始化工作的最佳方法是什么?全局变量似乎不是正确的路径。 最佳答案 虽然您确实无法访问所需文件中定义的局部变量,但您可以访问常量,并

ruby - 在 Ruby 中,有没有办法打印出所有定义/预定义的全局变量和常量?

在Ruby中,有没有办法打印出所有定义/预定义的全局变量和常量? 最佳答案 global_variables方法返回所有全局变量名称的数组。要获取模块中定义的所有常量的名称,请将constants发送到相关模块。例如,要获取无需指定命名空间即可访问的所有常量,请使用Object.constants。 关于ruby-在Ruby中,有没有办法打印出所有定义/预定义的全局变量和常量?,我们在StackOverflow上找到一个类似的问题: https://stack

ruby - 为什么我可以引用从未运行过的 if/unless/case 语句之外的变量?

为什么下面的代码不会报错?iffalsex=0endx#=>nil而以下确实会引发错误:y#NameError:undefinedlocalvariableormethod`y'formain:Objectunless和case语句也会发生同样的事情。 最佳答案 这是因为Ruby解析器的工作方式。变量由解析器定义,解析器逐行遍历代码,而不管它是否会实际执行。一旦解析器看到x=,它就会在当前范围内定义局部变量x(值为nil)。因为if/unless/case/for/while不创建新的作用域,x被定义并且在代码块之外可用。由于条件为

ruby-on-rails - 内置 Capistrano 变量

有人知道所有内置Capistrano变量的列表,例如current_path等吗? 最佳答案 您可以在以下位置找到所有这些:https://github.com/capistrano/capistrano/blob/legacy-v2/lib/capistrano/recipes/deploy.rb更新:v3不再具有与v2相同的配置选项。我在上面链接了v2配置选项,但v3具有以下内容:这是遗留的,保留在这篇文章中:#===========================================================

Ruby:使用 Object.send 分配变量

有什么办法可以做这样的事情吗?a=Struct.new(:c).new(1)b=Struct.new(:c).new(2)a.send(:c)=>1b.send(:c)=>2a.send(:c)=b.send(:c)最后一行导致错误:syntaxerror,unexpected'=',expecting$enda.send(:c)=b.send(:c)^ 最佳答案 a.send(:c=,b.send(:c))foo.bar=baz不是调用方法bar后跟赋值-它是调用方法bar=。因此,您需要告诉send调用该方法。

ruby-on-rails - 在 Ruby 中,我可以在初始化方法中以某种方式自动填充实例变量吗?

在Ruby中,我可以在初始化方法中以某种方式自动填充实例变量吗?例如,如果我有:classWeekendattr_accessor:start_date,:end_date,:title,:description,:locationdefinitialize(params)#SOMETHINGHERETOAUTOPOPULATEINSTANCEVARIABLESWITHAPPROPRIATEPARAMSendend 最佳答案 您可以使用instance_variable_set像这样:params.eachdo|key,value|

ruby - 测试变量是否与多个字符串中的任何一个匹配,而没有长的 if-elsif 链或 case-when

我想在ruby​​中有一种很好的单行方式来表达ifmystr=="abc"or"def"or"ghi"or"xyz"但在我通常查阅的在线引用资料中找不到如何做到这一点...谢谢! 最佳答案 也许你不知道你可以在一个案例上放置多个条件:casemystrwhen"abc","def","ghi","xyz"..end但是对于这个特定的基于字符串的测试,我会使用正则表达式:ifmystr=~/\A(?:abc|def|ghi|xyz)\z/如果您不想构造正则表达式,也不想使用case语句,您可以创建一个对象数组并使用Array#incl

Ruby 将散列中的值转换为局部变量

假设我有这个哈希:entry={"director"=>"ChrisNolan","producer"=>"SumDuk","writer"=>"SaadBakk"}我想将每个键和相关值提取到它自己的局部变量中:director="ChrisNolan"producer="SumDuk"...通过使用循环而不是:director=entry["director"]因为有很多值,我不想单独做。我发现它几乎完美地工作,除了它创建了一个实例变量,我想要一个局部变量,但是local_variable_set由于某种原因不存在。entry.each_pair{|k,v|instance_vari